/**
 */
package org.mro.grib.model.files.secondEdition.products.impl;

import java.nio.ByteBuffer;

import org.eclipse.emf.common.notify.Notification;

import org.eclipse.emf.ecore.EClass;

import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EObjectImpl;

import org.mro.grib.model.files.secondEdition.products.ProductDefinitionTemplate40;
import org.mro.grib.model.files.secondEdition.products.ProductsPackage;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Product Definition Template40</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * <ul>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getParameterCategory <em>Parameter Category</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getParameterNumber <em>Parameter Number</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getTypeOfGeneratingProcess <em>Type Of Generating Process</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getBackgroundGeneratingProcess <em>Background Generating Process</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getAnalysisOrForecastGeneratingProcess <em>Analysis Or Forecast Generating Process</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getHoursOfObservationalDataCutOff <em>Hours Of Observational Data Cut Off</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getMinutesOfObservationalDataCutOff <em>Minutes Of Observational Data Cut Off</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getIndicatorOfUnitOfTimeRange <em>Indicator Of Unit Of Time Range</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getForecastTime <em>Forecast Time</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getTypeOfFirstFixedSurface <em>Type Of First Fixed Surface</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getScaleFactorOfFirstFixedSurface <em>Scale Factor Of First Fixed Surface</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getScaledValueOfFirstFixedSurface <em>Scaled Value Of First Fixed Surface</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getTypeOfSecondFixedSurface <em>Type Of Second Fixed Surface</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getScaleFactorOfSecondFixedSurface <em>Scale Factor Of Second Fixed Surface</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate40Impl#getScaledValueOfSecondFixedSurface <em>Scaled Value Of Second Fixed Surface</em>}</li>
 * </ul>
 * </p>
 *
 * @generated
 */
public class ProductDefinitionTemplate40Impl extends EObjectImpl implements ProductDefinitionTemplate40 {
	/**
	 * The default value of the '{@link #getParameterCategory() <em>Parameter Category</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getParameterCategory()
	 * @generated
	 * @ordered
	 */
	protected static final byte PARAMETER_CATEGORY_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getParameterCategory() <em>Parameter Category</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getParameterCategory()
	 * @generated
	 * @ordered
	 */
	protected byte parameterCategory = PARAMETER_CATEGORY_EDEFAULT;

	/**
	 * The default value of the '{@link #getParameterNumber() <em>Parameter Number</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getParameterNumber()
	 * @generated
	 * @ordered
	 */
	protected static final byte PARAMETER_NUMBER_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getParameterNumber() <em>Parameter Number</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getParameterNumber()
	 * @generated
	 * @ordered
	 */
	protected byte parameterNumber = PARAMETER_NUMBER_EDEFAULT;

	/**
	 * The default value of the '{@link #getTypeOfGeneratingProcess() <em>Type Of Generating Process</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTypeOfGeneratingProcess()
	 * @generated
	 * @ordered
	 */
	protected static final byte TYPE_OF_GENERATING_PROCESS_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getTypeOfGeneratingProcess() <em>Type Of Generating Process</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTypeOfGeneratingProcess()
	 * @generated
	 * @ordered
	 */
	protected byte typeOfGeneratingProcess = TYPE_OF_GENERATING_PROCESS_EDEFAULT;

	/**
	 * The default value of the '{@link #getBackgroundGeneratingProcess() <em>Background Generating Process</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getBackgroundGeneratingProcess()
	 * @generated
	 * @ordered
	 */
	protected static final byte BACKGROUND_GENERATING_PROCESS_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getBackgroundGeneratingProcess() <em>Background Generating Process</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getBackgroundGeneratingProcess()
	 * @generated
	 * @ordered
	 */
	protected byte backgroundGeneratingProcess = BACKGROUND_GENERATING_PROCESS_EDEFAULT;

	/**
	 * The default value of the '{@link #getAnalysisOrForecastGeneratingProcess() <em>Analysis Or Forecast Generating Process</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAnalysisOrForecastGeneratingProcess()
	 * @generated
	 * @ordered
	 */
	protected static final byte ANALYSIS_OR_FORECAST_GENERATING_PROCESS_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getAnalysisOrForecastGeneratingProcess() <em>Analysis Or Forecast Generating Process</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAnalysisOrForecastGeneratingProcess()
	 * @generated
	 * @ordered
	 */
	protected byte analysisOrForecastGeneratingProcess = ANALYSIS_OR_FORECAST_GENERATING_PROCESS_EDEFAULT;

	/**
	 * The default value of the '{@link #getHoursOfObservationalDataCutOff() <em>Hours Of Observational Data Cut Off</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHoursOfObservationalDataCutOff()
	 * @generated
	 * @ordered
	 */
	protected static final short HOURS_OF_OBSERVATIONAL_DATA_CUT_OFF_EDEFAULT = 0;

	/**
	 * The cached value of the '{@link #getHoursOfObservationalDataCutOff() <em>Hours Of Observational Data Cut Off</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHoursOfObservationalDataCutOff()
	 * @generated
	 * @ordered
	 */
	protected short hoursOfObservationalDataCutOff = HOURS_OF_OBSERVATIONAL_DATA_CUT_OFF_EDEFAULT;

	/**
	 * The default value of the '{@link #getMinutesOfObservationalDataCutOff() <em>Minutes Of Observational Data Cut Off</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMinutesOfObservationalDataCutOff()
	 * @generated
	 * @ordered
	 */
	protected static final byte MINUTES_OF_OBSERVATIONAL_DATA_CUT_OFF_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getMinutesOfObservationalDataCutOff() <em>Minutes Of Observational Data Cut Off</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMinutesOfObservationalDataCutOff()
	 * @generated
	 * @ordered
	 */
	protected byte minutesOfObservationalDataCutOff = MINUTES_OF_OBSERVATIONAL_DATA_CUT_OFF_EDEFAULT;

	/**
	 * The default value of the '{@link #getIndicatorOfUnitOfTimeRange() <em>Indicator Of Unit Of Time Range</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIndicatorOfUnitOfTimeRange()
	 * @generated
	 * @ordered
	 */
	protected static final byte INDICATOR_OF_UNIT_OF_TIME_RANGE_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getIndicatorOfUnitOfTimeRange() <em>Indicator Of Unit Of Time Range</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getIndicatorOfUnitOfTimeRange()
	 * @generated
	 * @ordered
	 */
	protected byte indicatorOfUnitOfTimeRange = INDICATOR_OF_UNIT_OF_TIME_RANGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getForecastTime() <em>Forecast Time</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getForecastTime()
	 * @generated
	 * @ordered
	 */
	protected static final int FORECAST_TIME_EDEFAULT = 0;

	/**
	 * The cached value of the '{@link #getForecastTime() <em>Forecast Time</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getForecastTime()
	 * @generated
	 * @ordered
	 */
	protected int forecastTime = FORECAST_TIME_EDEFAULT;

	/**
	 * The default value of the '{@link #getTypeOfFirstFixedSurface() <em>Type Of First Fixed Surface</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTypeOfFirstFixedSurface()
	 * @generated
	 * @ordered
	 */
	protected static final byte TYPE_OF_FIRST_FIXED_SURFACE_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getTypeOfFirstFixedSurface() <em>Type Of First Fixed Surface</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTypeOfFirstFixedSurface()
	 * @generated
	 * @ordered
	 */
	protected byte typeOfFirstFixedSurface = TYPE_OF_FIRST_FIXED_SURFACE_EDEFAULT;

	/**
	 * The default value of the '{@link #getScaleFactorOfFirstFixedSurface() <em>Scale Factor Of First Fixed Surface</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getScaleFactorOfFirstFixedSurface()
	 * @generated
	 * @ordered
	 */
	protected static final byte SCALE_FACTOR_OF_FIRST_FIXED_SURFACE_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getScaleFactorOfFirstFixedSurface() <em>Scale Factor Of First Fixed Surface</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getScaleFactorOfFirstFixedSurface()
	 * @generated
	 * @ordered
	 */
	protected byte scaleFactorOfFirstFixedSurface = SCALE_FACTOR_OF_FIRST_FIXED_SURFACE_EDEFAULT;

	/**
	 * The default value of the '{@link #getScaledValueOfFirstFixedSurface() <em>Scaled Value Of First Fixed Surface</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getScaledValueOfFirstFixedSurface()
	 * @generated
	 * @ordered
	 */
	protected static final int SCALED_VALUE_OF_FIRST_FIXED_SURFACE_EDEFAULT = 0;

	/**
	 * The cached value of the '{@link #getScaledValueOfFirstFixedSurface() <em>Scaled Value Of First Fixed Surface</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getScaledValueOfFirstFixedSurface()
	 * @generated
	 * @ordered
	 */
	protected int scaledValueOfFirstFixedSurface = SCALED_VALUE_OF_FIRST_FIXED_SURFACE_EDEFAULT;

	/**
	 * The default value of the '{@link #getTypeOfSecondFixedSurface() <em>Type Of Second Fixed Surface</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTypeOfSecondFixedSurface()
	 * @generated
	 * @ordered
	 */
	protected static final byte TYPE_OF_SECOND_FIXED_SURFACE_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getTypeOfSecondFixedSurface() <em>Type Of Second Fixed Surface</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTypeOfSecondFixedSurface()
	 * @generated
	 * @ordered
	 */
	protected byte typeOfSecondFixedSurface = TYPE_OF_SECOND_FIXED_SURFACE_EDEFAULT;

	/**
	 * The default value of the '{@link #getScaleFactorOfSecondFixedSurface() <em>Scale Factor Of Second Fixed Surface</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getScaleFactorOfSecondFixedSurface()
	 * @generated
	 * @ordered
	 */
	protected static final byte SCALE_FACTOR_OF_SECOND_FIXED_SURFACE_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getScaleFactorOfSecondFixedSurface() <em>Scale Factor Of Second Fixed Surface</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getScaleFactorOfSecondFixedSurface()
	 * @generated
	 * @ordered
	 */
	protected byte scaleFactorOfSecondFixedSurface = SCALE_FACTOR_OF_SECOND_FIXED_SURFACE_EDEFAULT;

	/**
	 * The default value of the '{@link #getScaledValueOfSecondFixedSurface() <em>Scaled Value Of Second Fixed Surface</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getScaledValueOfSecondFixedSurface()
	 * @generated
	 * @ordered
	 */
	protected static final int SCALED_VALUE_OF_SECOND_FIXED_SURFACE_EDEFAULT = 0;

	/**
	 * The cached value of the '{@link #getScaledValueOfSecondFixedSurface() <em>Scaled Value Of Second Fixed Surface</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getScaledValueOfSecondFixedSurface()
	 * @generated
	 * @ordered
	 */
	protected int scaledValueOfSecondFixedSurface = SCALED_VALUE_OF_SECOND_FIXED_SURFACE_EDEFAULT;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ProductDefinitionTemplate40Impl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return ProductsPackage.Literals.PRODUCT_DEFINITION_TEMPLATE40;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getParameterCategory() {
		return parameterCategory;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setParameterCategory(byte newParameterCategory) {
		byte oldParameterCategory = parameterCategory;
		parameterCategory = newParameterCategory;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__PARAMETER_CATEGORY, oldParameterCategory, parameterCategory));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getParameterNumber() {
		return parameterNumber;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setParameterNumber(byte newParameterNumber) {
		byte oldParameterNumber = parameterNumber;
		parameterNumber = newParameterNumber;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__PARAMETER_NUMBER, oldParameterNumber, parameterNumber));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getTypeOfGeneratingProcess() {
		return typeOfGeneratingProcess;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTypeOfGeneratingProcess(byte newTypeOfGeneratingProcess) {
		byte oldTypeOfGeneratingProcess = typeOfGeneratingProcess;
		typeOfGeneratingProcess = newTypeOfGeneratingProcess;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_GENERATING_PROCESS, oldTypeOfGeneratingProcess, typeOfGeneratingProcess));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getBackgroundGeneratingProcess() {
		return backgroundGeneratingProcess;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setBackgroundGeneratingProcess(byte newBackgroundGeneratingProcess) {
		byte oldBackgroundGeneratingProcess = backgroundGeneratingProcess;
		backgroundGeneratingProcess = newBackgroundGeneratingProcess;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__BACKGROUND_GENERATING_PROCESS, oldBackgroundGeneratingProcess, backgroundGeneratingProcess));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getAnalysisOrForecastGeneratingProcess() {
		return analysisOrForecastGeneratingProcess;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setAnalysisOrForecastGeneratingProcess(byte newAnalysisOrForecastGeneratingProcess) {
		byte oldAnalysisOrForecastGeneratingProcess = analysisOrForecastGeneratingProcess;
		analysisOrForecastGeneratingProcess = newAnalysisOrForecastGeneratingProcess;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__ANALYSIS_OR_FORECAST_GENERATING_PROCESS, oldAnalysisOrForecastGeneratingProcess, analysisOrForecastGeneratingProcess));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public short getHoursOfObservationalDataCutOff() {
		return hoursOfObservationalDataCutOff;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setHoursOfObservationalDataCutOff(short newHoursOfObservationalDataCutOff) {
		short oldHoursOfObservationalDataCutOff = hoursOfObservationalDataCutOff;
		hoursOfObservationalDataCutOff = newHoursOfObservationalDataCutOff;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__HOURS_OF_OBSERVATIONAL_DATA_CUT_OFF, oldHoursOfObservationalDataCutOff, hoursOfObservationalDataCutOff));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getMinutesOfObservationalDataCutOff() {
		return minutesOfObservationalDataCutOff;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setMinutesOfObservationalDataCutOff(byte newMinutesOfObservationalDataCutOff) {
		byte oldMinutesOfObservationalDataCutOff = minutesOfObservationalDataCutOff;
		minutesOfObservationalDataCutOff = newMinutesOfObservationalDataCutOff;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__MINUTES_OF_OBSERVATIONAL_DATA_CUT_OFF, oldMinutesOfObservationalDataCutOff, minutesOfObservationalDataCutOff));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getIndicatorOfUnitOfTimeRange() {
		return indicatorOfUnitOfTimeRange;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setIndicatorOfUnitOfTimeRange(byte newIndicatorOfUnitOfTimeRange) {
		byte oldIndicatorOfUnitOfTimeRange = indicatorOfUnitOfTimeRange;
		indicatorOfUnitOfTimeRange = newIndicatorOfUnitOfTimeRange;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__INDICATOR_OF_UNIT_OF_TIME_RANGE, oldIndicatorOfUnitOfTimeRange, indicatorOfUnitOfTimeRange));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public int getForecastTime() {
		return forecastTime;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setForecastTime(int newForecastTime) {
		int oldForecastTime = forecastTime;
		forecastTime = newForecastTime;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__FORECAST_TIME, oldForecastTime, forecastTime));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getTypeOfFirstFixedSurface() {
		return typeOfFirstFixedSurface;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTypeOfFirstFixedSurface(byte newTypeOfFirstFixedSurface) {
		byte oldTypeOfFirstFixedSurface = typeOfFirstFixedSurface;
		typeOfFirstFixedSurface = newTypeOfFirstFixedSurface;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_FIRST_FIXED_SURFACE, oldTypeOfFirstFixedSurface, typeOfFirstFixedSurface));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getScaleFactorOfFirstFixedSurface() {
		return scaleFactorOfFirstFixedSurface;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setScaleFactorOfFirstFixedSurface(byte newScaleFactorOfFirstFixedSurface) {
		byte oldScaleFactorOfFirstFixedSurface = scaleFactorOfFirstFixedSurface;
		scaleFactorOfFirstFixedSurface = newScaleFactorOfFirstFixedSurface;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALE_FACTOR_OF_FIRST_FIXED_SURFACE, oldScaleFactorOfFirstFixedSurface, scaleFactorOfFirstFixedSurface));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public int getScaledValueOfFirstFixedSurface() {
		return scaledValueOfFirstFixedSurface;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setScaledValueOfFirstFixedSurface(int newScaledValueOfFirstFixedSurface) {
		int oldScaledValueOfFirstFixedSurface = scaledValueOfFirstFixedSurface;
		scaledValueOfFirstFixedSurface = newScaledValueOfFirstFixedSurface;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALED_VALUE_OF_FIRST_FIXED_SURFACE, oldScaledValueOfFirstFixedSurface, scaledValueOfFirstFixedSurface));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getTypeOfSecondFixedSurface() {
		return typeOfSecondFixedSurface;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTypeOfSecondFixedSurface(byte newTypeOfSecondFixedSurface) {
		byte oldTypeOfSecondFixedSurface = typeOfSecondFixedSurface;
		typeOfSecondFixedSurface = newTypeOfSecondFixedSurface;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_SECOND_FIXED_SURFACE, oldTypeOfSecondFixedSurface, typeOfSecondFixedSurface));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getScaleFactorOfSecondFixedSurface() {
		return scaleFactorOfSecondFixedSurface;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setScaleFactorOfSecondFixedSurface(byte newScaleFactorOfSecondFixedSurface) {
		byte oldScaleFactorOfSecondFixedSurface = scaleFactorOfSecondFixedSurface;
		scaleFactorOfSecondFixedSurface = newScaleFactorOfSecondFixedSurface;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALE_FACTOR_OF_SECOND_FIXED_SURFACE, oldScaleFactorOfSecondFixedSurface, scaleFactorOfSecondFixedSurface));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public int getScaledValueOfSecondFixedSurface() {
		return scaledValueOfSecondFixedSurface;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setScaledValueOfSecondFixedSurface(int newScaledValueOfSecondFixedSurface) {
		int oldScaledValueOfSecondFixedSurface = scaledValueOfSecondFixedSurface;
		scaledValueOfSecondFixedSurface = newScaledValueOfSecondFixedSurface;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALED_VALUE_OF_SECOND_FIXED_SURFACE, oldScaledValueOfSecondFixedSurface, scaledValueOfSecondFixedSurface));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object eGet(int featureID, boolean resolve, boolean coreType) {
		switch (featureID) {
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__PARAMETER_CATEGORY:
				return getParameterCategory();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__PARAMETER_NUMBER:
				return getParameterNumber();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_GENERATING_PROCESS:
				return getTypeOfGeneratingProcess();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__BACKGROUND_GENERATING_PROCESS:
				return getBackgroundGeneratingProcess();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__ANALYSIS_OR_FORECAST_GENERATING_PROCESS:
				return getAnalysisOrForecastGeneratingProcess();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__HOURS_OF_OBSERVATIONAL_DATA_CUT_OFF:
				return getHoursOfObservationalDataCutOff();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__MINUTES_OF_OBSERVATIONAL_DATA_CUT_OFF:
				return getMinutesOfObservationalDataCutOff();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__INDICATOR_OF_UNIT_OF_TIME_RANGE:
				return getIndicatorOfUnitOfTimeRange();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__FORECAST_TIME:
				return getForecastTime();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_FIRST_FIXED_SURFACE:
				return getTypeOfFirstFixedSurface();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALE_FACTOR_OF_FIRST_FIXED_SURFACE:
				return getScaleFactorOfFirstFixedSurface();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALED_VALUE_OF_FIRST_FIXED_SURFACE:
				return getScaledValueOfFirstFixedSurface();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_SECOND_FIXED_SURFACE:
				return getTypeOfSecondFixedSurface();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALE_FACTOR_OF_SECOND_FIXED_SURFACE:
				return getScaleFactorOfSecondFixedSurface();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALED_VALUE_OF_SECOND_FIXED_SURFACE:
				return getScaledValueOfSecondFixedSurface();
		}
		return super.eGet(featureID, resolve, coreType);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eSet(int featureID, Object newValue) {
		switch (featureID) {
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__PARAMETER_CATEGORY:
				setParameterCategory((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__PARAMETER_NUMBER:
				setParameterNumber((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_GENERATING_PROCESS:
				setTypeOfGeneratingProcess((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__BACKGROUND_GENERATING_PROCESS:
				setBackgroundGeneratingProcess((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__ANALYSIS_OR_FORECAST_GENERATING_PROCESS:
				setAnalysisOrForecastGeneratingProcess((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__HOURS_OF_OBSERVATIONAL_DATA_CUT_OFF:
				setHoursOfObservationalDataCutOff((Short)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__MINUTES_OF_OBSERVATIONAL_DATA_CUT_OFF:
				setMinutesOfObservationalDataCutOff((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__INDICATOR_OF_UNIT_OF_TIME_RANGE:
				setIndicatorOfUnitOfTimeRange((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__FORECAST_TIME:
				setForecastTime((Integer)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_FIRST_FIXED_SURFACE:
				setTypeOfFirstFixedSurface((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALE_FACTOR_OF_FIRST_FIXED_SURFACE:
				setScaleFactorOfFirstFixedSurface((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALED_VALUE_OF_FIRST_FIXED_SURFACE:
				setScaledValueOfFirstFixedSurface((Integer)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_SECOND_FIXED_SURFACE:
				setTypeOfSecondFixedSurface((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALE_FACTOR_OF_SECOND_FIXED_SURFACE:
				setScaleFactorOfSecondFixedSurface((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALED_VALUE_OF_SECOND_FIXED_SURFACE:
				setScaledValueOfSecondFixedSurface((Integer)newValue);
				return;
		}
		super.eSet(featureID, newValue);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eUnset(int featureID) {
		switch (featureID) {
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__PARAMETER_CATEGORY:
				setParameterCategory(PARAMETER_CATEGORY_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__PARAMETER_NUMBER:
				setParameterNumber(PARAMETER_NUMBER_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_GENERATING_PROCESS:
				setTypeOfGeneratingProcess(TYPE_OF_GENERATING_PROCESS_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__BACKGROUND_GENERATING_PROCESS:
				setBackgroundGeneratingProcess(BACKGROUND_GENERATING_PROCESS_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__ANALYSIS_OR_FORECAST_GENERATING_PROCESS:
				setAnalysisOrForecastGeneratingProcess(ANALYSIS_OR_FORECAST_GENERATING_PROCESS_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__HOURS_OF_OBSERVATIONAL_DATA_CUT_OFF:
				setHoursOfObservationalDataCutOff(HOURS_OF_OBSERVATIONAL_DATA_CUT_OFF_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__MINUTES_OF_OBSERVATIONAL_DATA_CUT_OFF:
				setMinutesOfObservationalDataCutOff(MINUTES_OF_OBSERVATIONAL_DATA_CUT_OFF_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__INDICATOR_OF_UNIT_OF_TIME_RANGE:
				setIndicatorOfUnitOfTimeRange(INDICATOR_OF_UNIT_OF_TIME_RANGE_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__FORECAST_TIME:
				setForecastTime(FORECAST_TIME_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_FIRST_FIXED_SURFACE:
				setTypeOfFirstFixedSurface(TYPE_OF_FIRST_FIXED_SURFACE_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALE_FACTOR_OF_FIRST_FIXED_SURFACE:
				setScaleFactorOfFirstFixedSurface(SCALE_FACTOR_OF_FIRST_FIXED_SURFACE_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALED_VALUE_OF_FIRST_FIXED_SURFACE:
				setScaledValueOfFirstFixedSurface(SCALED_VALUE_OF_FIRST_FIXED_SURFACE_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_SECOND_FIXED_SURFACE:
				setTypeOfSecondFixedSurface(TYPE_OF_SECOND_FIXED_SURFACE_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALE_FACTOR_OF_SECOND_FIXED_SURFACE:
				setScaleFactorOfSecondFixedSurface(SCALE_FACTOR_OF_SECOND_FIXED_SURFACE_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALED_VALUE_OF_SECOND_FIXED_SURFACE:
				setScaledValueOfSecondFixedSurface(SCALED_VALUE_OF_SECOND_FIXED_SURFACE_EDEFAULT);
				return;
		}
		super.eUnset(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean eIsSet(int featureID) {
		switch (featureID) {
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__PARAMETER_CATEGORY:
				return parameterCategory != PARAMETER_CATEGORY_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__PARAMETER_NUMBER:
				return parameterNumber != PARAMETER_NUMBER_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_GENERATING_PROCESS:
				return typeOfGeneratingProcess != TYPE_OF_GENERATING_PROCESS_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__BACKGROUND_GENERATING_PROCESS:
				return backgroundGeneratingProcess != BACKGROUND_GENERATING_PROCESS_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__ANALYSIS_OR_FORECAST_GENERATING_PROCESS:
				return analysisOrForecastGeneratingProcess != ANALYSIS_OR_FORECAST_GENERATING_PROCESS_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__HOURS_OF_OBSERVATIONAL_DATA_CUT_OFF:
				return hoursOfObservationalDataCutOff != HOURS_OF_OBSERVATIONAL_DATA_CUT_OFF_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__MINUTES_OF_OBSERVATIONAL_DATA_CUT_OFF:
				return minutesOfObservationalDataCutOff != MINUTES_OF_OBSERVATIONAL_DATA_CUT_OFF_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__INDICATOR_OF_UNIT_OF_TIME_RANGE:
				return indicatorOfUnitOfTimeRange != INDICATOR_OF_UNIT_OF_TIME_RANGE_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__FORECAST_TIME:
				return forecastTime != FORECAST_TIME_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_FIRST_FIXED_SURFACE:
				return typeOfFirstFixedSurface != TYPE_OF_FIRST_FIXED_SURFACE_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALE_FACTOR_OF_FIRST_FIXED_SURFACE:
				return scaleFactorOfFirstFixedSurface != SCALE_FACTOR_OF_FIRST_FIXED_SURFACE_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALED_VALUE_OF_FIRST_FIXED_SURFACE:
				return scaledValueOfFirstFixedSurface != SCALED_VALUE_OF_FIRST_FIXED_SURFACE_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__TYPE_OF_SECOND_FIXED_SURFACE:
				return typeOfSecondFixedSurface != TYPE_OF_SECOND_FIXED_SURFACE_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALE_FACTOR_OF_SECOND_FIXED_SURFACE:
				return scaleFactorOfSecondFixedSurface != SCALE_FACTOR_OF_SECOND_FIXED_SURFACE_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE40__SCALED_VALUE_OF_SECOND_FIXED_SURFACE:
				return scaledValueOfSecondFixedSurface != SCALED_VALUE_OF_SECOND_FIXED_SURFACE_EDEFAULT;
		}
		return super.eIsSet(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public String toString() {
		if (eIsProxy()) return super.toString();

		StringBuffer result = new StringBuffer(super.toString());
		result.append(" (parameterCategory: "); //$NON-NLS-1$
		result.append(parameterCategory);
		result.append(", parameterNumber: "); //$NON-NLS-1$
		result.append(parameterNumber);
		result.append(", typeOfGeneratingProcess: "); //$NON-NLS-1$
		result.append(typeOfGeneratingProcess);
		result.append(", backgroundGeneratingProcess: "); //$NON-NLS-1$
		result.append(backgroundGeneratingProcess);
		result.append(", analysisOrForecastGeneratingProcess: "); //$NON-NLS-1$
		result.append(analysisOrForecastGeneratingProcess);
		result.append(", hoursOfObservationalDataCutOff: "); //$NON-NLS-1$
		result.append(hoursOfObservationalDataCutOff);
		result.append(", minutesOfObservationalDataCutOff: "); //$NON-NLS-1$
		result.append(minutesOfObservationalDataCutOff);
		result.append(", indicatorOfUnitOfTimeRange: "); //$NON-NLS-1$
		result.append(indicatorOfUnitOfTimeRange);
		result.append(", forecastTime: "); //$NON-NLS-1$
		result.append(forecastTime);
		result.append(", typeOfFirstFixedSurface: "); //$NON-NLS-1$
		result.append(typeOfFirstFixedSurface);
		result.append(", scaleFactorOfFirstFixedSurface: "); //$NON-NLS-1$
		result.append(scaleFactorOfFirstFixedSurface);
		result.append(", scaledValueOfFirstFixedSurface: "); //$NON-NLS-1$
		result.append(scaledValueOfFirstFixedSurface);
		result.append(", typeOfSecondFixedSurface: "); //$NON-NLS-1$
		result.append(typeOfSecondFixedSurface);
		result.append(", scaleFactorOfSecondFixedSurface: "); //$NON-NLS-1$
		result.append(scaleFactorOfSecondFixedSurface);
		result.append(", scaledValueOfSecondFixedSurface: "); //$NON-NLS-1$
		result.append(scaledValueOfSecondFixedSurface);
		result.append(')');
		return result.toString();
	}

	/* (non-Javadoc)
	 * @see org.mro.grib.model.files.secondEdition.products.IProductDefinition#initialise(java.nio.ByteBuffer)
	 */
	@Override
	public void initialise(ByteBuffer buffer) {
		parameterCategory = buffer.get();
		parameterNumber = buffer.get();
		typeOfGeneratingProcess = buffer.get();
		backgroundGeneratingProcess = buffer.get();
		analysisOrForecastGeneratingProcess = buffer.get();
		hoursOfObservationalDataCutOff = buffer.getShort();
		minutesOfObservationalDataCutOff = buffer.get();
		indicatorOfUnitOfTimeRange = buffer.get();
		forecastTime = buffer.getInt();
		typeOfFirstFixedSurface = buffer.get();
		scaleFactorOfFirstFixedSurface = buffer.get();
		scaledValueOfFirstFixedSurface = buffer.getInt();
		typeOfSecondFixedSurface = buffer.get();
		scaleFactorOfSecondFixedSurface = buffer.get();
		scaledValueOfSecondFixedSurface = buffer.getInt();
	}
	
} //ProductDefinitionTemplate40Impl
